From 75636a750ecd93305eabe226ad95d2a58e65117f Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Tue, 3 Nov 2015 16:33:33 +0100
Subject: [PATCH] Fix build with unbundled pcre

Poco supports two modes for the pcre library: bundled (the default)
and unbundled. In bundled mode, an internal copy of the pcre library
is used by Poco. Since this isn't really nice, Buildroot uses the
"unbundled" mode. However, Poco pokes into some internal symbols of
pcre, which doesn't play well with unbundled.

To solve this, this commit is an adaptation of the Gentoo patch at
https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/poco/files/poco-1.4.4-patch-for-libpcre-8.32.patch?revision=1.1
to make such symbols available internally in Poco, by using parts of
the bundled Pcre copy.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Foundation/Makefile            |  1 +
 Foundation/src/pcre_internal.h | 17 +++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/Foundation/Makefile b/Foundation/Makefile
index a347daa..9231c51 100644
--- a/Foundation/Makefile
+++ b/Foundation/Makefile
@@ -46,6 +46,7 @@ pcre_utf8_objects = pcre_ucd pcre_tables
 
 ifdef POCO_UNBUNDLED
 	SYSLIBS += -lpcre -lz
+	objects += $(pcre_utf8_objects)
 else
 	objects += $(zlib_objects) $(pcre_objects) $(pcre_utf8_objects)
 endif
diff --git a/Foundation/src/pcre_internal.h b/Foundation/src/pcre_internal.h
index f3e69fc..c6f1d44 100644
--- a/Foundation/src/pcre_internal.h
+++ b/Foundation/src/pcre_internal.h
@@ -2636,6 +2636,17 @@ typedef struct {
 } ucp_type_table;
 
 
+/* renamed to avoid clashes with system pcre */
+#define _pcre_utf8_table1      _poco__pcre_utf8_table1
+#define _pcre_utf8_table1_size _poco__pcre_utf8_table1_size
+#define _pcre_utf8_table2      _poco__pcre_utf8_table2
+#define _pcre_utf8_table3      _poco__pcre_utf8_table3
+#define _pcre_utf8_table4      _poco__pcre_utf8_table4
+#define _pcre_utt              _poco__pcre_utt
+#define _pcre_utt_size         _poco__pcre_utt_size
+#define _pcre_utt_names        _poco__pcre_utt_names
+#define _pcre_OP_lengths       _poco__pcre_OP_lengths
+
 /* Internal shared data tables. These are tables that are used by more than one
 of the exported public functions. They have to be "external" in the C sense,
 but are not part of the PCRE public API. The data for these tables is in the
@@ -2749,6 +2760,12 @@ typedef struct {
   pcre_int32 other_case; /* offset to other case, or zero if none */
 } ucd_record;
 
+/* renamed to avoid clashes with system pcre */
+#define _pcre_ucd_records _poco__pcre_ucd_records
+#define _pcre_ucd_stage1 _poco__pcre_ucd_stage1
+#define _pcre_ucd_stage2 _poco__pcre_ucd_stage2
+#define _pcre_ucp_gentype _poco__pcre_ucp_gentype
+
 extern const pcre_uint32 PRIV(ucd_caseless_sets)[];
 extern const ucd_record  PRIV(ucd_records)[];
 extern const pcre_uint8  PRIV(ucd_stage1)[];
-- 
2.6.2

